﻿#pragma once

using namespace System;

namespace $RootNamespace$
{

	ref class $Context$;
	// $IState$ 
	public interface class $IState$
	{
		void $Handle$($Context$^);
		property System::String ^ThisState{System::String ^get();}

	};


	// $Context$ 
	public ref class $Context$
	{

	public:
		// Constructor 
		static void Test();
		// Property 
		property $IState$ ^CurrentState;
		$Context$($IState$ ^p$IState$);



		void Request();
	};


	// $ConcreteStateA$ 
	private ref class $ConcreteStateA$ : $IState$
	{
	public:
		virtual void $Handle$($Context$ ^context) sealed;

		property System::String ^ThisState
		{
			virtual System::String ^get() sealed;
		}
	};

	// $ConcreteStateB$ 
	private ref class $ConcreteStateB$ : $IState$
	{
	public:
		virtual void $Handle$($Context$ ^context) sealed;
		property System::String ^ThisState
		{
			virtual System::String ^get() sealed;
		}
	};

	// $ConcreteStateC$ 
	private ref class $ConcreteStateC$ : $IState$
	{
	public:
		virtual void $Handle$($Context$ ^context) sealed;
		property System::String ^ThisState
		{
			virtual System::String ^get() sealed;
		}
	};

}